* buffer.c (Fmake_overlay): Put beg and end in the
authorJim Blandy <jimb@redhat.com>
Mon, 24 May 1993 20:57:32 +0000 (20:57 +0000)
committerJim Blandy <jimb@redhat.com>
Mon, 24 May 1993 20:57:32 +0000 (20:57 +0000)
right order.
(Fmove_overlay): If beg and end are markers, make sure they're in
the right buffer.

src/buffer.c

index 3a90154992d9961faadb8ac5cb6e1c26992174f8..b50e7d0f1b02dfaad98b399f529f055a9d9384ca 100644 (file)
@@ -1489,28 +1489,28 @@ BEG and END may be integers or markers.")
 
   if (NILP (buffer))
     XSET (buffer, Lisp_Buffer, current_buffer);
-  CHECK_BUFFER (buffer, 2);
+  else
+    CHECK_BUFFER (buffer, 2);
+  if (MARKERP (beg)
+      && ! EQ (Fmarker_buffer (beg), buffer))
+    error ("Marker points into wrong buffer");
+  if (MARKERP (end)
+      && ! EQ (Fmarker_buffer (end), buffer))
+    error ("Marker points into wrong buffer");
 
-  b = XBUFFER (buffer);
+  CHECK_NUMBER_COERCE_MARKER (beg, 1);
+  CHECK_NUMBER_COERCE_MARKER (end, 1);
 
-  if (MARKERP (beg))
-    {
-      if (! EQ (Fmarker_buffer (beg), buffer))
-       error ("Marker points into wrong buffer");
-      else
-       beg = Fcopy_marker (beg);
-    }
-  else
-    beg = Fset_marker (Fmake_marker (), beg, buffer);
-  if (MARKERP (end))
+  if (XINT (beg) > XINT (end))
     {
-      if (! EQ (Fmarker_buffer (end), buffer))
-       error ("Marker points into wrong buffer");
-      else
-       end = Fcopy_marker (end);
+      Lisp_Object temp = beg;
+      beg = end; end = temp;
     }
-  else
-    end = Fset_marker (Fmake_marker (), end, buffer);
+
+  b = XBUFFER (buffer);
+
+  beg = Fset_marker (Fmake_marker (), beg, buffer);
+  end = Fset_marker (Fmake_marker (), end, buffer);
 
   overlay = Fcons (Fcons (beg, end), Qnil);
   XSETTYPE (overlay, Lisp_Overlay);
@@ -1547,6 +1547,14 @@ buffer.")
   if (NILP (buffer))
     XSET (buffer, Lisp_Buffer, current_buffer);
   CHECK_BUFFER (buffer, 3);
+
+  if (MARKERP (beg)
+      && ! EQ (Fmarker_buffer (beg), buffer))
+    error ("Marker points into wrong buffer");
+  if (MARKERP (end)
+      && ! EQ (Fmarker_buffer (end), buffer))
+    error ("Marker points into wrong buffer");
+
   CHECK_NUMBER_COERCE_MARKER (beg, 1);
   CHECK_NUMBER_COERCE_MARKER (end, 1);